package fenetre;

import java.io.File;
import java.io.IOException;
import java.util.List;

import noNamespace.EcranDocument;
import noNamespace.EcranDocument.Ecran;
import noNamespace.EcranDocument.Ecran.Composants;
import noNamespace.EcranDocument.Ecran.Composants.TextComposant;
import noNamespace.EcranDocument.Ecran.Composants.TextComposant.Composant;
import noNamespace.EcranDocument.Ecran.Composants.TextComposant.ModeleClass;

public class Generateur {

	private List<fenetre.Composant> mListeComposant;
	

	public Generateur(List<fenetre.Composant> aListeComposant) {
		mListeComposant = aListeComposant;
	}
	
	public void generer(){
		EcranDocument lEcranDocument = EcranDocument.Factory.newInstance();
		Ecran lEcran = Ecran.Factory.newInstance();
		lEcranDocument.setEcran(lEcran);
		lEcran = lEcranDocument.getEcran();
		
		Composants lComposants = Composants.Factory.newInstance();
		lEcran.setComposants(lComposants);
		lComposants = lEcran.getComposants();
		
		TextComposant lEcranComposants = TextComposant.Factory.newInstance();
		lComposants.setTextComposant(lEcranComposants);
		lEcranComposants = lComposants.getTextComposant();
		
		List<Composant> lListeComposant = lEcranComposants.getComposantList();
		List<ModeleClass> lListeModeleClass = lEcranComposants.getModeleClassList();
		
		for(fenetre.Composant lComposant : mListeComposant){
			noNamespace.EcranDocument.Ecran.Composants.TextComposant.Composant lComposantXml = ComposantHelper.getComposantXml(lComposant);
			int lIndex = modeleClasseExiste(lComposant.getType(),lListeModeleClass);
			if(lIndex != -1){
				lComposantXml.setModeleClasse(lIndex);
			}else{
				lComposantXml.setModeleClasse(ajouterModeleClasse(lComposant.getType(),lListeModeleClass));
			}
			lListeComposant.add(lComposantXml);
		}
		File lFile = new File("test.ec");
		try {
			System.out.println(lEcranDocument.getEcran().toString());
			System.out.println(lEcranDocument.getEcran().getComposants().getTextComposant().getComposantList().size());
			lEcranDocument.save(lFile);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	private int ajouterModeleClasse(Type aType,List<ModeleClass> aListeModeleClass) {
		int lIndex = mListeComposant.size();
		ModeleClass lModelClasse = ModeleClass.Factory.newInstance();
		lModelClasse.setId(lIndex);
		lModelClasse.setClasse(aType.getClasse());
		aListeModeleClass.add(lModelClasse);
		return lIndex;
	}

	private int modeleClasseExiste(Type aType, List<ModeleClass> aListeModeleClass) {
		for(int i=0;i<aListeModeleClass.size();i++){
			ModeleClass lModeleClasse = aListeModeleClass.get(i);
			if(lModeleClasse.getClasse().equals(aType.getClasse())){
				return i;
			}
		}
		return -1;
		
	}
}
